﻿using System;
using System.Collections.Generic;
using Inventione.Framework.BusinessLogic.Exceptions;
using Inventione.Outsourcing.DataAccess;
using Inventione.Outsourcing.DataLinq;

namespace Inventione.Outsourcing.BusinessLogic
{
    public class BLLocalContrato : Inventione.Framework.BusinessLogic.BLBase
    {

        // Representa o objeto de acesso a dados
        private DALocalContrato da = null;

        /// <summary>
        /// Construtor padrão
        /// </summary>
        public BLLocalContrato()
            : base("DEFAULT")
        {
            da = new DALocalContrato("DEFAULT");
        }

        /// <summary>
        /// Construtor utilizando o cliente
        /// </summary>
        /// <param name="tenantId">Identificador do cliente</param>
        public BLLocalContrato(string tenantId)
            :base (tenantId)
        {
            da = new DALocalContrato(tenantId);
        }

        /// <summary>
        /// Consulta lociais contrato (utilizando vários critérios opcionais)
        /// </summary>
        /// <param name="cdContrato">Código do contrato</param>
        /// <param name="cdLocal">Código do local</param>
        /// <param name="maximumRows">Quantidade máxima de linhas de retorno</param>
        /// <param name="startRowIndex">Linha inicial de retorno</param>
        /// <param name="sortExpression">Compo para ordenação</param>
        /// <returns>Lista de locais contrato</returns>
        public List<LOCAL_CONTRATO> consultarLocaisContrato(int cdContrato, int cdLocal, int maximumRows, int startRowIndex, string sortExpression)
        {
            List<LOCAL_CONTRATO> retorno = null;

            try
            {
                retorno = this.da.consultarLocaisContrato(cdContrato, cdLocal, maximumRows, startRowIndex, sortExpression);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Consulta lociais contrato (utilizando vários critérios opcionais)
        /// </summary>
        /// <param name="cdContrato">Código do contrato</param>
        /// <param name="cdLocal">Código do local</param>
        /// <returns>Quantidade de registros atingidos pela consulta</returns>
        public int consultarLocaisContratoCount(int cdContrato, int cdLocal)
        {
            int retorno = 0;

            try
            {
                retorno = da.consultarLocaisContratoCount(cdContrato, cdLocal);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Obtem um local contrato
        /// </summary>
        /// <param name="cdContrato">Código do contrato</param>
        /// <param name="cdLocal">Código doo local</param>
        /// <returns>Entidade local contrato</returns>
        public LOCAL_CONTRATO obterLocalContrato(int cdContrato, int cdLocal)
        {
            LOCAL_CONTRATO retorno = null;

            try
            {
                retorno = da.obterLocalContrato(cdContrato, cdLocal);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Obtem um local contrato
        /// </summary>
        /// <param name="cdContrato">Código do contrato</param>
        /// <param name="cdLocal">Código doo local</param>
        /// <returns>Entidade local contrato</returns>
        public List<LOCAL_CONTRATO> listarLocalContrato(int cdContrato, int cdLocal)
        {
            List<LOCAL_CONTRATO> retorno = null;

            try
            {
                retorno = this.da.listarLocalContrato(cdContrato, cdLocal);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Lista local contrato para combo
        /// </summary>
        /// <param name="cdContrato">Código do contrato</param>
        /// <returns>Lista de entidade combo</returns>
        public List<TOCombo> listarLocaisContratoCombo(int cdContrato)
        {
            List<TOCombo> retorno = null;

            try
            {
                retorno = this.da.listarLocaisContratoCombo(cdContrato);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        #region Métodos básicos - CRUD

        /// <summary>
        /// Insere um local contrato
        /// </summary>
        /// <param name="entity">Entidade local contrato</param>
        /// <returns>Entidade local contrato</returns>
        public LOCAL_CONTRATO inserirLocalContrato(LOCAL_CONTRATO entity)
        {
            LOCAL_CONTRATO retorno = null;

            try
            {
                retorno = this.da.inserirLocalContrato(entity);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Atualiza os dados de um local contrato
        /// </summary>
        /// <param name="entity">Entidade local contrato</param>
        public void atualizarLocalContrato(LOCAL_CONTRATO entity)
        {
            try
            {
                this.da.atualizarLocalContrato(entity);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }
        }

        /// <summary>
        /// Exclui um local contrato
        /// </summary>
        /// <param name="entity">Entidade local contrato</param>
        public void excluirLocalContrato(LOCAL_CONTRATO entity)
        {
            try
            {
                this.da.excluirLocalContrato(entity);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }
        }

        #endregion

    }

}
